c++ - 少走弯路的API Hooking
全部标签 我正在尝试创建一个只允许所有Windows用户使用一个实例的应用程序。我目前正在通过打开要写入的文件并将其保持打开状态来执行此操作。这种方法安全吗?您知道使用C的替代方法吗? 最佳答案 标准解决方案是创建一个全局mutex在应用程序启动期间。第一次启动该应用程序时,这将成功。在随后的尝试中,它会失败,这就是您暂停和加载第二个实例失败的线索。您可以通过调用CreateMutexfunction在Windows中创建互斥量.如链接文档所示,在互斥量名称前加上Global\可确保它对所有终端服务器session可见,这正是您想要的。相比之
我需要编写一个创建文件的WindowsC应用程序,并且在应用程序终止时需要删除该文件(无论是在正常终止还是强制终止的情况下)。另一个要求是用户还应该能够以只读模式打开此文件(可能使用记事本)。基本上这将在Java中读取(即DocumentBuilder::parse)我写了下面的代码HANDLEhFile=CreateFile("d:\\test.xml",GENERIC_WRITE,FILE_SHARE_READ,NULL,CREATE_ALWAYS,FILE_FLAG_DELETE_ON_CLOSE,NULL);当我在Notepad.exe中打开文件(即test.xml)时,我收到
我有父进程和子进程,在父进程中我声明句柄将被继承,如http://msdn.microsoft.com/en-us/library/windows/desktop/ms724466%28v=vs.85%29.aspx:...SECURITY_ATTRIBUTESsa;sa.nLength=sizeof(SECURITY_ATTRIBUTES);sa.bInheritHandle=TRUE;sa.lpSecurityDescriptor=NULL;//CreateapipefortheParentprocess'sSTDOUT.if(!CreatePipe(&hChildReadPipe
这两者之间有什么区别(如果有的话)?MSDN很不清楚。这里听起来它们是等价的:https://msdn.microsoft.com/en-us/library/windows/desktop/ms683197%28v=vs.85%29.aspx但这里听起来好像_pgmptr可能并不总是给我一个完整的路径,但它并没有真正解释在什么情况下。https://msdn.microsoft.com/en-us/library/tza1y5f7.aspx_pgmptr似乎对我更有吸引力,因为我不必用它来玩缓冲区大小猜谜游戏。 最佳答案 _pgm
我必须使用C编写一个虚拟磁盘文件处理系统作为大学项目的一部分(我正在运行Windows),当我写入FAT表时遇到了一个问题,我试图创建一个FAT链包含对FATblock10(0A00)的引用,而是写入0D0A00。磁盘由1024个大小为1024的block组成,第一个block用于任意信息,第二和第三个block用于FAT,第四个block用于根目录,其余block用于更远的数据。FAT表定义为:fatentry_tFAT[MAXBLOCKS];Fatentry_t定义为:typedefshortfatentry_t;我使用以下方式访问它:typedefunionblock{datab
查看MSDNdocumentation对于CreateIoCompletionPort我们读到:NumberOfConcurrentThreads[in]ThemaximumnumberofthreadsthattheoperatingsystemcanallowtoconcurrentlyprocessI/OcompletionpacketsfortheI/Ocompletionport.ThisparameterisignorediftheExistingCompletionPortparameterisnotNULL.Ifthisparameteriszero,thesystem
当我在Win32api上以OVERLAPPED方式打开和读取文件时,我有几种方法来完成IO请求,包括使用等待文件句柄(或重叠结构中的事件)WaitForSingleObjectGetOverlappedResult和bWait=TRUE这两个函数似乎具有相同的效果:线程停止直到句柄或事件发出信号,这意味着数据被放置在提供给ReadFile的缓冲区中。那么,有什么区别呢?为什么我需要GetOverlappedResult? 最佳答案 我完全同意RemusRusanuanswer.也改为创建自己的IOCP和线程池,它们将在此IOCP上监
我正在创建一个程序,我希望它在Windows和UNIX上运行。然而,我使用了很多特定于Windows或Unix的函数。例如位于#include中的函数和#include对于UNIX和#include和#include适用于Windows。我让它们独立工作,但我想将它们合并在一起。这是一个例子:structtimespecstart,end;//UNIXcodeLARGE_INTEGERclockFrequency;//WindowscodeQueryPerformanceFrequency(&clockFrequency);LARGE_INTEGERstartTime;LARGE_IN
在C中,使用标准WindowsAPI,读取未格式化磁盘的最佳方法是什么?具体来说,我有一个MMC或SDcard有数据,但没有文件系统(不是FAT16,不是FAT32,只是原始数据)。如果有一种简单的方法可以打开整个卡进行逐字节二进制访问,那就太好了。谢谢! 最佳答案 我会去HANDLEdrive=CreateFile(_T("\\.\PhysicalDrive0"),GENERIC_READ,FILE_SHARE_WRITE,0,OPEN_EXISTING,0,0);//errorhandlingDWORDbr=0;DISK_GEO
我有两种不同的方法来检查进程是否仍在运行:1)使用GetExitCodeProcess()2)使用CreateToolhelp32Snapshot()遍历进程列表并检查PID现在,在这两种情况下,我仍然知道我用TerminateProcess终止的进程仍然存在,即使它不是。有没有办法通过PID明确知道进程是活着还是死了?谢谢! 最佳答案 不要将PID用于这样的事情。PID被重复使用并且具有非常的范围,具有非常高的冲突概率。换句话说,您会发现一个正在运行的进程,但它是一个不同进程。 关于c